// pages/addresslist/addresslist.js
const util = require('../../../../utils/util.js')
const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    navStyle: [],
    addressList: [],
    reposition: 0,
    list: ['当前定位', '重新定位'],
    is_default: 0,
    selected: 0, //1.添加地址 2.编辑地址
    id: 0,
    fromcate: 0, //来源  1 购物车
    form: {
      userName: '',
      telNumber: '',
      addrDetail: '',
      region: ['选择地址>', '', ''], // 省市区数据 第一个可以当placeholder
      tag: '',
      latitude: 0,
      longitude: 0,
      is_default: 0
    },
    customItem: '', // 自定义picker显示的内容
    tipsList: [
      {
        tipsCode: '1',
        tipsName: '公司',
        checked: false
      },
      {
        tipsCode: '2',
        tipsName: '家',
        checked: false
      },
      {
        tipsCode: '3',
        tipsName: '学校',
        checked: false
      }
    ],
    defaultVal: true,
    checked: false, // 性别选择
    gender: 1,
    cartIds: ''
  },
  //返回上一页
  navigateBack: function () {
    if (this.data.selected == 2 || this.data.selected == 1) {
      console.log('返回上一页', this.data.selected)
      this.resetForm()
      this.setData({
        selected: 0
      })

      return
    }

    wx.navigateBack()
  },
  reposition: function (e) {
    let that = this
    let index = e.currentTarget.dataset.index
    that.setData({
      reposition: index
    })
    this.getaddressList()
  },
  selected: function (e) {
    let that = this
    let id = e.currentTarget.dataset.addresid
    let index = e.currentTarget.dataset.index
    that.setData({
      selected: index,
      id: id
    })
  },
  Postcode: '', // 邮编
  AddressId: -1,
  // 省市区选择事件
  bindRegionChange(e) {
    const { value, code, postcode } = e.detail
    // console.log(code) // 统计用区划代码
    // postcode 是邮政编码
    this.Postcode = postcode
    this.setData({
      'form.region': value
    })
  },
  // 提交表单
  submitForm(e) {
    if (!this.validateForm(e)) return
    var that = this
    if (util.isLogin() !== true) {
      return false
    }
    const token = wx.getStorageSync('token')
    //请求头参数
    const header = {
      Authorization: token
    }
    // userName,telNumber...对应的是input的name属性
    const { userName, telNumber, region, addrDetail, latitude, longitude, tag, is_default } = e.detail.value
    if (this.data.id >= 0) {
      // 编辑地址
      var params = {
        id: this.data.id,
        token: token,
        name: userName,
        phone: telNumber,
        provinceid: region[0],
        cityid: region[1],
        countryid: region[2],
        street: addrDetail,
        lat: latitude,
        lng: longitude,
        is_default: is_default ? 1 : 0,
        tag: tag
      }
      util.request('/api/address/edit', params, 'POST').then((res) => {
        var datas = res.data
        if (datas.code == 0) {
          wx.showToast({
            title: '修改成功',
            icon: 'loading...', //图标，支持"success"、"loading"
            //image: '/images/tan.png',//自定义图标的本地路径，image 的优先级高于 icon
            duration: 2000, //提示的延迟时间，单位毫秒，默认：1500
            mask: true, //是否显示透明蒙层，防止触摸穿透，默认：false
            success: function () {
              // setTimeout(function() {
              //   // wx.redirectTo({
              //   //   url: '/modules/settingModule/pages/addresslist/addreslist'
              //   // })
              // },0);
              that.resetForm()
              that.setData({
                selected: 0
              })

              that.onShow()
            },
            fail: function () {},
            complete: function () {}
          })
        } else {
          wx.showToast({
            title: '修改失败'
          })
        }
      })
    } else {
      // 新增地址
      var params = {
        token: token,
        name: userName,
        phone: telNumber,
        provinceid: region[0],
        cityid: region[1],
        countryid: region[2],
        street: addrDetail,
        lat: latitude,
        lng: longitude,
        is_default: is_default ? 1 : 0,
        tag: tag
      }
      util.request('/api/address/add', params, 'POST').then((res) => {
        var datas = res.data
        if (datas.code == 0) {
          wx.showToast({
            title: '新增成功',
            icon: 'loading...', //图标，支持"success"、"loading"
            //image: '/images/tan.png',//自定义图标的本地路径，image 的优先级高于 icon
            duration: 2000, //提示的延迟时间，单位毫秒，默认：1500
            mask: true, //是否显示透明蒙层，防止触摸穿透，默认：false
            success: function () {
              that.resetForm()
              that.setData({
                selected: 0
              })

              that.onShow()
            },
            fail: function () {},
            complete: function () {}
          })
        } else {
          wx.showToast({
            title: '新增失败'
          })
        }
      })
    }
  },
  handleChange(e) {
    var that = this
    var is_default = e.detail.value == true ? 1 : 0
    that.setData({
      defaultVal: e.detail.value,
      is_default: is_default
    })
  },

  //删除
  async delAddress(e) {
    var that = this
    if (util.isLogin() !== true) {
      return false
    }
    wx.showModal({
      title: '提示',
      content: '确定要删除吗？',
      success: function (sm) {
        if (sm.confirm) {
          // 用户点击了确定 可以调用删除方法了
          that.delAddressConfirm(e)
        } else if (sm.cancel) {
          console.log('用户点击取消')
        }
      }
    })
  },
  async delAddressConfirm(e) {
    var that = this
    if (util.isLogin() !== true) {
      return false
    }
    const token = wx.getStorageSync('token')
    //请求头参数
    const header = {
      Authorization: token
    }
    var params = {
      id: e.currentTarget.dataset.addresid,
      token: token
    }
    util.request('/api/address/remove', params, 'POST').then((res) => {
      var datas = res.data
      if (datas.code == 0) {
        that.setData({
          selected: 0
        })
        wx.showToast({
          title: '删除成功',
          icon: 'loading...', //图标，支持"success"、"loading"
          //image: '/images/tan.png',//自定义图标的本地路径，image 的优先级高于 icon
          duration: 2000, //提示的延迟时间，单位毫秒，默认：1500
          mask: true, //是否显示透明蒙层，防止触摸穿透，默认：false
          success: function () {
            // setTimeout(function() {
            //   wx.redirectTo({
            //     url: '/modules/settingModule/pages/addresslist/addreslist'
            //   })
            // },1000)
            that.onShow()
          },
          fail: function () {},
          complete: function () {}
        })
      } else {
        wx.showToast({
          title: '删除失败'
        })
      }
    })
  },
  // 验证form
  validateForm(e) {
    const telReg = app.regExps.mobile
    let { userName, telNumber, region, addrDetail, latitude, longitude, tag } = e.detail.value

    if (!userName.trim()) {
      wx.showToast({
        title: '请先填写姓名',
        icon: 'none'
      })
      return false
    }
    if (!telNumber.trim() || !telReg.test(telNumber)) {
      wx.showToast({
        title: '请先填正确的手机号',
        icon: 'none'
      })
      return false
    }
    if (!region.length) {
      wx.showToast({
        title: '请先选择省市区',
        icon: 'none'
      })
      return false
    }
    if (!addrDetail.trim()) {
      wx.showToast({
        title: '该地址不规范，请重新填写',
        icon: 'none'
      })
      return false
    }
    if (util.isFalseValue(longitude) || util.isFalseValue(latitude)) {
      longitude = 0
      latitude = 0
    }
    // if (!tag.trim()) {
    //   wx.showToast({
    //     title: '请选择地址标签',
    //     icon: "none"
    //   })
    //   return false
    // }
    return true
  },
  // 编辑地址获取需要编辑的地址信息
  getEditAddress(e) {
    if (util.isLogin() !== true) {
      return false
    }
    const addressid = e.currentTarget.dataset.addresid
    const addressList = this.data.addressList
    addressList.forEach((v) => {
      if (addressid == v.id) {
        this.setData({
          'form.userName': v.name,
          'form.telNumber': v.phone,
          'form.addrDetail': v.street,
          'form.longitude': v.lng,
          'form.latitude': v.lat,
          'form.region': [v.provinceid, v.cityid, v.countryid],
          'form.is_default': v.is_default,
          selected: 2,
          id: v.id,
          is_default: v.is_default
          // 'form.tag':v.tag?v.tag:''
        })
      }
    })
  },
  // 重置表单
  resetForm() {
    this.setData({
      'form.userName': '',
      'form.telNumber': '',
      'form.addrDetail': '',
      'form.longitude': 0,
      'form.latitude': 0,
      'form.region': ['选择地址>', '', ''],
      'form.tag': '',
      'form.is_default': 0
    })

    // wx.navigateBack({
    //   delta: 1
    // })
  },
  async getaddressList(e) {
    if (util.isLogin() !== true) {
      return false
    }
    var that = this
    const token = wx.getStorageSync('token')
    try {
      const listParams = {
        token
      }
      util.request('/api/address/index', listParams, 'GET').then((res) => {
        var datas = res.data
        if (datas.code == 0) {
          console.log('获取成功', datas)
          that.setData({
            addressList: datas.data
          })
        } else {
          that.setData({
            addressList: []
          })
        }
      })
    } catch (err) {
      wx.showToast({
        title: err
      })
    }
  },
  /**
   * 标签选择切换
   */
  tipsSwitch: function (options) {
    let that = this
    // 按钮索引
    var index = options.currentTarget.dataset.index
    // 索引对应内容
    var item = that.data.tipsList[index]
    // 选中，未选中状态切换
    that.data.tipsList.forEach((v) => {
      if (v.tipsCode == item.tipsCode) {
        item.checked = !item.checked
        that.setData({
          'form.tag': item.tipsName
        })
      } else {
        v.checked = false
      }
    })
    // 更新
    that.setData({
      tipsList: that.data.tipsList
    })
  },

  /**
   * 调取微信接口调起地图选择地址
   */
  async chooseLocation() {
    let pos = null
    const { latitude, longitude } = this.data.form
    if (!util.isFalseValue(latitude) && !util.isFalseValue(longitude)) {
      pos = {
        latitude: this.data.form.latitude,
        longitude: this.data.form.longitude
      }
    }

    try {
      const res = await wx.chooseLocation(pos)
      console.log(res)
      const addressInfo = util.parseAddress(res.address)
      console.log(addressInfo)
      const { province, city, area, detail } = addressInfo
      const { name, latitude, longitude } = res

      if (!!detail) {
        this.setData({
          'form.region': [province, city, area],
          'form.addrDetail': detail + name,
          'form.longitude': longitude,
          'form.latitude': latitude
        })
      } else {
        console.error('选择位置失败', err)
      }
    } catch (error) {
      console.log('选择位置失败', error)
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log(options, 'options==地址页面接受到的参数')
    if (options && options.cartIds) {
      this.setData({
        cartIds: options.cartIds
      })
    } else {
      // 处理参数不存在或为空的情况，可以设置一个默认值或给出提示
      this.setData({
        cartIds: []
      })
    }
    if (util.isLogin() === true) {
      this.setData({
        navStyle: app.globalData,
        selected: 0,
        fromcate: options.fromcate //options.fromcate == 1 ? 1 : 0
      })
    }
  },
  choose_addr(e) {
    if (this.data.fromcate == 1) {
      app.globalData.addrId = e.currentTarget.dataset.address.id
      //来自购物车
      //   wx.navigateBack({
      //     delta: 1
      //   });
    }
    wx.redirectTo({
      url: '/pages/confirmcart/confirmcart?cartIds=' + this.data.cartIds
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    if (util.isLogin() === true) {
      this.getaddressList()
    }
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (util.isLogin() == true) {
      this.getaddressList()
      const { id } = app.getPage(1).options
      if (id >= 0) {
        this.AddressId = id
        this.getEditAddress(id)
      }
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {}
})
